home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / 5 / MACVOGL- / EXAMPLES / TEAPOT.C < prev    next >
Text File  |  1992-07-19  |  14KB  |  494 lines

  1.  
  2. #include <stdio.h>
  3.  
  4. #ifdef SGI
  5. #include "gl.h"
  6. #include "device.h"
  7. #else
  8. #include "vogl.h"
  9. #include "vodevice.h"
  10. #endif
  11.  
  12. /*
  13.  *    Draws Newell's Teapot as a heap of Bezier surface patches.
  14.  */
  15.  
  16.  
  17. #define    TEAPOT        1L
  18.  
  19. /*
  20.  *    Data for the teapot.
  21.  */
  22. #define    NUM_PNTS    306
  23. #define    NUM_PATCH    32 
  24.  
  25. float    xyz[NUM_PNTS][3] = {
  26.     { 1.400,   0.000,   2.400},
  27.     { 1.400,  -0.784,   2.400},
  28.     { 0.784,  -1.400,   2.400},
  29.     { 0.000,  -1.400,   2.400},
  30.     { 1.337,   0.000,   2.531},
  31.     { 1.337,  -0.749,   2.531},
  32.     { 0.749,  -1.337,   2.531},
  33.     { 0.000,  -1.337,   2.531},
  34.     { 1.438,   0.000,   2.531},
  35.     { 1.438,  -0.805,   2.531},
  36.     { 0.805,  -1.438,   2.531},
  37.     { 0.000,  -1.438,   2.531},
  38.     { 1.500,   0.000,   2.400},
  39.     { 1.500,  -0.840,   2.400},
  40.     { 0.840,  -1.500,   2.400},
  41.     { 0.000,  -1.500,   2.400},
  42.     {-0.784,  -1.400,   2.400},
  43.     {-1.400,  -0.784,   2.400},
  44.     {-1.400,   0.000,   2.400},
  45.     {-0.749,  -1.337,   2.531},
  46.     {-1.337,  -0.749,   2.531},
  47.     {-1.337,   0.000,   2.531},
  48.     {-0.805,  -1.438,   2.531},
  49.     {-1.438,  -0.805,   2.531},
  50.     {-1.438,   0.000,   2.531},
  51.     {-0.840,  -1.500,   2.400},
  52.     {-1.500,  -0.840,   2.400},
  53.     {-1.500,   0.000,   2.400},
  54.     {-1.400,   0.784,   2.400},
  55.     {-0.784,   1.400,   2.400},
  56.     { 0.000,   1.400,   2.400},
  57.     {-1.337,   0.749,   2.531},
  58.     {-0.749,   1.337,   2.531},
  59.     { 0.000,   1.337,   2.531},
  60.     {-1.438,   0.805,   2.531},
  61.     {-0.805,   1.438,   2.531},
  62.     { 0.000,   1.438,   2.531},
  63.     {-1.500,   0.840,   2.400},
  64.     {-0.840,   1.500,   2.400},
  65.     { 0.000,   1.500,   2.400},
  66.     { 0.784,   1.400,   2.400},
  67.     { 1.400,   0.784,   2.400},
  68.     { 0.749,   1.337,   2.531},
  69.     { 1.337,   0.749,   2.531},
  70.     { 0.805,   1.438,   2.531},
  71.     { 1.438,   0.805,   2.531},
  72.     { 0.840,   1.500,   2.400},
  73.     { 1.500,   0.840,   2.400},
  74.     { 1.750,   0.000,   1.875},
  75.     { 1.750,  -0.980,   1.875},
  76.     { 0.980,  -1.750,   1.875},
  77.     { 0.000,  -1.750,   1.875},
  78.     { 2.000,   0.000,   1.350},
  79.     { 2.000,  -1.120,   1.350},
  80.     { 1.120,  -2.000,   1.350},
  81.     { 0.000,  -2.000,   1.350},
  82.     { 2.000,   0.000,   0.900},
  83.     { 2.000,  -1.120,   0.900},
  84.     { 1.120,  -2.000,   0.900},
  85.     { 0.000,  -2.000,   0.900},
  86.     {-0.980,  -1.750,   1.875},
  87.     {-1.750,  -0.980,   1.875},
  88.     {-1.750,   0.000,   1.875},
  89.     {-1.120,  -2.000,   1.350},
  90.     {-2.000,  -1.120,   1.350},
  91.     {-2.000,   0.000,   1.350},
  92.     {-1.120,  -2.000,   0.900},
  93.     {-2.000,  -1.120,   0.900},
  94.     {-2.000,   0.000,   0.900},
  95.     {-1.750,   0.980,   1.875},
  96.     {-0.980,   1.750,   1.875},
  97.     { 0.000,   1.750,   1.875},
  98.     {-2.000,   1.120,   1.350},
  99.     {-1.120,   2.000,   1.350},
  100.     { 0.000,   2.000,   1.350},
  101.     {-2.000,   1.120,   0.900},
  102.     {-1.120,   2.000,   0.900},
  103.     { 0.000,   2.000,   0.900},
  104.     { 0.980,   1.750,   1.875},
  105.     { 1.750,   0.980,   1.875},
  106.     { 1.120,   2.000,   1.350},
  107.     { 2.000,   1.120,   1.350},
  108.     { 1.120,   2.000,   0.900},
  109.     { 2.000,   1.120,   0.900},
  110.     { 2.000,   0.000,   0.450},
  111.     { 2.000,  -1.120,   0.450},
  112.     { 1.120,  -2.000,   0.450},
  113.     { 0.000,  -2.000,   0.450},
  114.     { 1.500,   0.000,   0.225},
  115.     { 1.500,  -0.840,   0.225},
  116.     { 0.840,  -1.500,   0.225},
  117.     { 0.000,  -1.500,   0.225},
  118.     { 1.500,   0.000,   0.150},
  119.     { 1.500,  -0.840,   0.150},
  120.     { 0.840,  -1.500,   0.150},
  121.     { 0.000,  -1.500,   0.150},
  122.     {-1.120,  -2.000,   0.450},
  123.     {-2.000,  -1.120,   0.450},
  124.     {-2.000,   0.000,   0.450},
  125.     {-0.840,  -1.500,   0.225},
  126.     {-1.500,  -0.840,   0.225},
  127.     {-1.500,   0.000,   0.225},
  128.     {-0.840,  -1.500,   0.150},
  129.     {-1.500,  -0.840,   0.150},
  130.     {-1.500,   0.000,   0.150},
  131.     {-2.000,   1.120,   0.450},
  132.     {-1.120,   2.000,   0.450},
  133.     { 0.000,   2.000,   0.450},
  134.     {-1.500,   0.840,   0.225},
  135.     {-0.840,   1.500,   0.225},
  136.     { 0.000,   1.500,   0.225},
  137.     {-1.500,   0.840,   0.150},
  138.     {-0.840,   1.500,   0.150},
  139.     { 0.000,   1.500,   0.150},
  140.     { 1.120,   2.000,   0.450},
  141.     { 2.000,   1.120,   0.450},
  142.     { 0.840,   1.500,   0.225},
  143.     { 1.500,   0.840,   0.225},
  144.     { 0.840,   1.500,   0.150},
  145.     { 1.500,   0.840,   0.150},
  146.     {-1.600,   0.000,   2.025},
  147.     {-1.600,  -0.300,   2.025},
  148.     {-1.500,  -0.300,   2.250},
  149.     {-1.500,   0.000,   2.250},
  150.     {-2.300,   0.000,   2.025},
  151.     {-2.300,  -0.300,   2.025},
  152.     {-2.500,  -0.300,   2.250},
  153.     {-2.500,   0.000,   2.250},
  154.     {-2.700,   0.000,   2.025},
  155.     {-2.700,  -0.300,   2.025},
  156.     {-3.000,  -0.300,   2.250},
  157.     {-3.000,   0.000,   2.250},
  158.     {-2.700,   0.000,   1.800},
  159.     {-2.700,  -0.300,   1.800},
  160.     {-3.000,  -0.300,   1.800},
  161.     {-3.000,   0.000,   1.800},
  162.     {-1.500,   0.300,   2.250},
  163.     {-1.600,   0.300,   2.025},
  164.     {-2.500,   0.300,   2.250},
  165.     {-2.300,   0.300,   2.025},
  166.     {-3.000,   0.300,   2.250},
  167.     {-2.700,   0.300,   2.025},
  168.     {-3.000,   0.300,   1.800},
  169.     {-2.700,   0.300,   1.800},
  170.     {-2.700,   0.000,   1.575},
  171.     {-2.700,  -0.300,   1.575},
  172.     {-3.000,  -0.300,   1.350},
  173.     {-3.000,   0.000,   1.350},
  174.     {-2.500,   0.000,   1.125},
  175.     {-2.500,  -0.300,   1.125},
  176.     {-2.650,  -0.300,   0.938},
  177.     {-2.650,   0.000,   0.938},
  178.     {-2.000,  -0.300,   0.900},
  179.     {-1.900,  -0.300,   0.600},
  180.     {-1.900,   0.000,   0.600},
  181.     {-3.000,   0.300,   1.350},
  182.     {-2.700,   0.300,   1.575},
  183.     {-2.650,   0.300,   0.938},
  184.     {-2.500,   0.300,   1.125},
  185.     {-1.900,   0.300,   0.600},
  186.     {-2.000,   0.300,   0.900},
  187.     { 1.700,   0.000,   1.425},
  188.     { 1.700,  -0.660,   1.425},
  189.     { 1.700,  -0.660,   0.600},
  190.     { 1.700,   0.000,   0.600},
  191.     { 2.600,   0.000,   1.425},
  192.     { 2.600,  -0.660,   1.425},
  193.     { 3.100,  -0.660,   0.825},
  194.     { 3.100,   0.000,   0.825},
  195.     { 2.300,   0.000,   2.100},
  196.     { 2.300,  -0.250,   2.100},
  197.     { 2.400,  -0.250,   2.025},
  198.     { 2.400,   0.000,   2.025},
  199.     { 2.700,   0.000,   2.400},
  200.     { 2.700,  -0.250,   2.400},
  201.     { 3.300,  -0.250,   2.400},
  202.     { 3.300,   0.000,   2.400},
  203.     { 1.700,   0.660,   0.600},
  204.     { 1.700,   0.660,   1.425},
  205.     { 3.100,   0.660,   0.825},
  206.     { 2.600,   0.660,   1.425},
  207.     { 2.400,   0.250,   2.025},
  208.     { 2.300,   0.250,   2.100},
  209.     { 3.300,   0.250,   2.400},
  210.     { 2.700,   0.250,   2.400},
  211.     { 2.800,   0.000,   2.475},
  212.     { 2.800,  -0.250,   2.475},
  213.     { 3.525,  -0.250,   2.494},
  214.     { 3.525,   0.000,   2.494},
  215.     { 2.900,   0.000,   2.475},
  216.     { 2.900,  -0.150,   2.475},
  217.     { 3.450,  -0.150,   2.513},
  218.     { 3.450,   0.000,   2.513},
  219.     { 2.800,   0.000,   2.400},
  220.     { 2.800,  -0.150,   2.400},
  221.     { 3.200,  -0.150,   2.400},
  222.     { 3.200,   0.000,   2.400},
  223.     { 3.525,   0.250,   2.494},
  224.     { 2.800,   0.250,   2.475},
  225.     { 3.450,   0.150,   2.513},
  226.     { 2.900,   0.150,   2.475},
  227.     { 3.200,   0.150,   2.400},
  228.     { 2.800,   0.150,   2.400},
  229.     { 0.000,   0.000,   3.150},
  230.     { 0.000,  -0.002,   3.150},
  231.     { 0.002,   0.000,   3.150},
  232.     { 0.800,   0.000,   3.150},
  233.     { 0.800,  -0.450,   3.150},
  234.     { 0.450,  -0.800,   3.150},
  235.     { 0.000,  -0.800,   3.150},
  236.     { 0.000,   0.000,   2.850},
  237.     { 0.200,   0.000,   2.700},
  238.     { 0.200,  -0.112,   2.700},
  239.     { 0.112,  -0.200,   2.700},
  240.     { 0.000,  -0.200,   2.700},
  241.     {-0.002,   0.000,   3.150},
  242.     {-0.450,  -0.800,   3.150},
  243.     {-0.800,  -0.450,   3.150},
  244.     {-0.800,   0.000,   3.150},
  245.     {-0.112,  -0.200,   2.700},
  246.     {-0.200,  -0.112,   2.700},
  247.     {-0.200,   0.000,   2.700},
  248.     { 0.000,   0.002,   3.150},
  249.     {-0.800,   0.450,   3.150},
  250.     {-0.450,   0.800,   3.150},
  251.     { 0.000,   0.800,   3.150},
  252.     {-0.200,   0.112,   2.700},
  253.     {-0.112,   0.200,   2.700},
  254.     { 0.000,   0.200,   2.700},
  255.     { 0.450,   0.800,   3.150},
  256.     { 0.800,   0.450,   3.150},
  257.     { 0.112,   0.200,   2.700},
  258.     { 0.200,   0.112,   2.700},
  259.     { 0.400,   0.000,   2.550},
  260.     { 0.400,  -0.224,   2.550},
  261.     { 0.224,  -0.400,   2.550},
  262.     { 0.000,  -0.400,   2.550},
  263.     { 1.300,   0.000,   2.550},
  264.     { 1.300,  -0.728,   2.550},
  265.     { 0.728,  -1.300,   2.550},
  266.     { 0.000,  -1.300,   2.550},
  267.     { 1.300,   0.000,   2.400},
  268.     { 1.300,  -0.728,   2.400},
  269.     { 0.728,  -1.300,   2.400},
  270.     { 0.000,  -1.300,   2.400},
  271.     {-0.224,  -0.400,   2.550},
  272.     {-0.400,  -0.224,   2.550},
  273.     {-0.400,   0.000,   2.550},
  274.     {-0.728,  -1.300,   2.550},
  275.     {-1.300,  -0.728,   2.550},
  276.     {-1.300,   0.000,   2.550},
  277.     {-0.728,  -1.300,   2.400},
  278.     {-1.300,  -0.728,   2.400},
  279.     {-1.300,   0.000,   2.400},
  280.     {-0.400,   0.224,   2.550},
  281.     {-0.224,   0.400,   2.550},
  282.     { 0.000,   0.400,   2.550},
  283.     {-1.300,   0.728,   2.550},
  284.     {-0.728,   1.300,   2.550},
  285.     { 0.000,   1.300,   2.550},
  286.     {-1.300,   0.728,   2.400},
  287.     {-0.728,   1.300,   2.400},
  288.     { 0.000,   1.300,   2.400},
  289.     { 0.224,   0.400,   2.550},
  290.     { 0.400,   0.224,   2.550},
  291.     { 0.728,   1.300,   2.550},
  292.     { 1.300,   0.728,   2.550},
  293.     { 0.728,   1.300,   2.400},
  294.     { 1.300,   0.728,   2.400},
  295.     { 0.000,   0.000,   0.000},
  296.     { 1.500,   0.000,   0.150},
  297.     { 1.500,   0.840,   0.150},
  298.     { 0.840,   1.500,   0.150},
  299.     { 0.000,   1.500,   0.150},
  300.     { 1.500,   0.000,   0.075},
  301.     { 1.500,   0.840,   0.075},
  302.     { 0.840,   1.500,   0.075},
  303.     { 0.000,   1.500,   0.075},
  304.     { 1.425,   0.000,   0.000},
  305.     { 1.425,   0.798,   0.000},
  306.     { 0.798,   1.425,   0.000},
  307.     { 0.000,   1.425,   0.000},
  308.     {-0.840,   1.500,   0.150},
  309.     {-1.500,   0.840,   0.150},
  310.     {-1.500,   0.000,   0.150},
  311.     {-0.840,   1.500,   0.075},
  312.     {-1.500,   0.840,   0.075},
  313.     {-1.500,   0.000,   0.075},
  314.     {-0.798,   1.425,   0.000},
  315.     {-1.425,   0.798,   0.000},
  316.     {-1.425,   0.000,   0.000},
  317.     {-1.500,  -0.840,   0.150},
  318.     {-0.840,  -1.500,   0.150},
  319.     { 0.000,  -1.500,   0.150},
  320.     {-1.500,  -0.840,   0.075},
  321.     {-0.840,  -1.500,   0.075},
  322.     { 0.000,  -1.500,   0.075},
  323.     {-1.425,  -0.798,   0.000},
  324.     {-0.798,  -1.425,   0.000},
  325.     { 0.000,  -1.425,   0.000},
  326.     { 0.840,  -1.500,   0.150},
  327.     { 1.500,  -0.840,   0.150},
  328.     { 0.840,  -1.500,   0.075},
  329.     { 1.500,  -0.840,   0.075},
  330.     { 0.798,  -1.425,   0.000},
  331.     { 1.425,  -0.798,   0.000}
  332. };
  333.  
  334. int    patches[NUM_PATCH][16] = {
  335.     {  1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,  16},
  336.     {  4,  17,  18,  19,   8,  20,  21,  22,  12,  23,  24,  25,  16,  26,  27,  28},
  337.     { 19,  29,  30,  31,  22,  32,  33,  34,  25,  35,  36,  37,  28,  38,  39,  40},
  338.     { 31,  41,  42,   1,  34,  43,  44,   5,  37,  45,  46,   9,  40,  47,  48,  13},
  339.     { 13,  14,  15,  16,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60},
  340.     { 16,  26,  27,  28,  52,  61,  62,  63,  56,  64,  65,  66,  60,  67,  68,  69},
  341.     { 28,  38,  39,  40,  63,  70,  71,  72,  66,  73,  74,  75,  69,  76,  77,  78},
  342.     { 40,  47,  48,  13,  72,  79,  80,  49,  75,  81,  82,  53,  78,  83,  84,  57},
  343.     { 57,  58,  59,  60,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96},
  344.     { 60,  67,  68,  69,  88,  97,  98,  99,  92, 100, 101, 102,  96, 103, 104, 105},
  345.     { 69,  76,  77,  78,  99, 106, 107, 108, 102, 109, 110, 111, 105, 112, 113, 114},
  346.     { 78,  83,  84,  57, 108, 115, 116,  85, 111, 117, 118,  89, 114, 119, 120,  93},
  347.     {121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136},
  348.     {124, 137, 138, 121, 128, 139, 140, 125, 132, 141, 142, 129, 136, 143, 144, 133},
  349.     {133, 134, 135, 136, 145, 146, 147, 148, 149, 150, 151, 152,  69, 153, 154, 155},
  350.     {136, 143, 144, 133, 148, 156, 157, 145, 152, 158, 159, 149, 155, 160, 161,  69},
  351.     {162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177},
  352.     {165, 178, 179, 162, 169, 180, 181, 166, 173, 182, 183, 170, 177, 184, 185, 174},
  353.     {174, 175, 176, 177, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197},
  354.     {177, 184, 185, 174, 189, 198, 199, 186, 193, 200, 201, 190, 197, 202, 203, 194},
  355.     {204, 204, 204, 204, 207, 208, 209, 210, 211, 211, 211, 211, 212, 213, 214, 215},
  356.     {204, 204, 204, 204, 210, 217, 218, 219, 211, 211, 211, 211, 215, 220, 221, 222},
  357.     {204, 204, 204, 204, 219, 224, 225, 226, 211, 211, 211, 211, 222, 227, 228, 229},
  358.     {204, 204, 204, 204, 226, 230, 231, 207, 211, 211, 211, 211, 229, 232, 233, 212},
  359.     {212, 213, 214, 215, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245},
  360.     {215, 220, 221, 222, 237, 246, 247, 248, 241, 249, 250, 251, 245, 252, 253, 254},
  361.     {222, 227, 228, 229, 248, 255, 256, 257, 251, 258, 259, 260, 254, 261, 262, 263},
  362.     {229, 232, 233, 212, 257, 264, 265, 234, 260, 266, 267, 238, 263, 268, 269, 242},
  363.     {270, 270, 270, 270, 279, 280, 281, 282, 275, 276, 277, 278, 271, 272, 273, 274},
  364.     {270, 270, 270, 270, 282, 289, 290, 291, 278, 286, 287, 288, 274, 283, 284, 285},
  365.     {270, 270, 270, 270, 291, 298, 299, 300, 288, 295, 296, 297, 285, 292, 293, 294},
  366.     {270, 270, 270, 270, 300, 305, 306, 279, 297, 303, 304, 275, 294, 301, 302, 271}
  367. };
  368.  
  369.  
  370. /*
  371.  * patch basis type
  372.  */
  373.  
  374. Matrix    bezier = {
  375.     {-1.0,    3.0,    -3.0,    1.0},
  376.     {3.0,    -6.0,    3.0,    0.0},
  377.     {-3.0,    3.0,    0.0,    0.0},
  378.     {1.0,    0.0,    0.0,    0.0} 
  379. };
  380.  
  381. Matrix    x, y, z;
  382.  
  383. main(argc, argv)
  384.     int    argc;
  385.     char    **argv;
  386. {
  387.     int    i, j, k;
  388.     short    val;
  389.  
  390.     fprintf(stderr, "Using %s:\n\n", argv[0]);
  391.  
  392.     fprintf(stderr, "Use the 'q' key to quit\n");
  393.     fprintf(stderr, "Use the 'x' key to rotate about x\n");
  394.     fprintf(stderr, "Use the 'y' key to rotate about y\n");
  395.     fprintf(stderr, "Use the 'z' key to rotate about z\n");
  396.     fprintf(stderr, "Use the 'e' key to enlarge\n");
  397.     fprintf(stderr, "Use the 'r' key to reduce\n");
  398.  
  399.     winopen("teapot");
  400.     qdevice(KEYBD);
  401.     unqdevice(INPUTCHANGE);
  402.  
  403.     color(BLACK);
  404.     clear();
  405.  
  406.     window(-5.0, 5.0, -5.0, 5.0, -5.0, 5.0);
  407.     lookat(0.0, 0.0, 8.0, 0.0, 0.0, 0.0, 0);
  408.  
  409.     patchcurves(4L, 4L);
  410.     patchprecision(6L, 6L);
  411.     defbasis((short)1, bezier);
  412.     patchbasis(1L, 1L);
  413.  
  414.     /*
  415.      * Make an object with the teapot in it.
  416.      */
  417.  
  418.     makeobj(TEAPOT);
  419.         color(CYAN);
  420.         for (i = 0; i < NUM_PATCH; i++) {
  421.             /*
  422.              * Set up geometry arrays...
  423.              */
  424.             for (j = 0; j < 4; j++) {
  425.                 x[0][j] = xyz[patches[i][j] - 1][0];
  426.                 x[1][j] = xyz[patches[i][j + 4] - 1][0];
  427.                 x[2][j] = xyz[patches[i][j + 8] - 1][0];
  428.                 x[3][j] = xyz[patches[i][j + 12] - 1][0];
  429.  
  430.                 y[0][j] = xyz[patches[i][j] - 1][1];
  431.                 y[1][j] = xyz[patches[i][j + 4] - 1][1];
  432.                 y[2][j] = xyz[patches[i][j + 8] - 1][1];
  433.                 y[3][j] = xyz[patches[i][j + 12] - 1][1];
  434.  
  435.                 z[0][j] = xyz[patches[i][j] - 1][2];
  436.                 z[1][j] = xyz[patches[i][j + 4] - 1][2];
  437.                 z[2][j] = xyz[patches[i][j + 8] - 1][2];
  438.                 z[3][j] = xyz[patches[i][j + 12] - 1][2];
  439.             }
  440.             /*
  441.              * Draw it...
  442.              */
  443.             patch(x, y, z);
  444.         }
  445.     closeobj();
  446.  
  447.     doublebuffer();
  448.     gconfig();
  449.  
  450.     while (1) {
  451.  
  452.         color(BLACK);
  453.         clear();
  454.         callobj(TEAPOT);
  455.  
  456.         swapbuffers();
  457.  
  458.         if (qtest()) {
  459.             (void)qread(&val);
  460.  
  461.             switch (val) {
  462.  
  463.             case 'q':    /* Stop the program */
  464.             case 27:
  465.                 gexit();
  466.                 exit(0);
  467.  
  468.             case 'x':    /* Obvious isn't it */
  469.                 rotate(100, 'x');
  470.                 break;
  471.  
  472.             case 'y':
  473.                 rotate(100, 'y');
  474.                 break;
  475.  
  476.             case 'z':
  477.                 rotate(100, 'z');
  478.                 break;
  479.  
  480.             case 'e':    /* Enlarge */
  481.                 scale(1.1, 1.1, 1.1);
  482.                 break;
  483.  
  484.             case 'r':    /* Reduce */
  485.                 scale(0.9, 0.9, 0.9);
  486.                 break;
  487.  
  488.             default:
  489.                 ;
  490.             }
  491.         }
  492.     }
  493. }
  494.